import { menuDataToRouter } from '@/router/utils/menuToRouter'
import { AppRouteRecord } from '@/types/router'
import request from '@/utils/http'

// 获取用户列表
export function fetchGetUserList(params: Api.SystemManage.UserSearchParams) {
  return request.get<Api.SystemManage.UserList>({
    url: '/user/list',
    params
  })
}

// 获取角色列表
export function fetchGetRoleList(params: Api.SystemManage.RoleSearchParams) {
  return request.get<Api.SystemManage.RoleList>({
    url: '/role/list',
    params
  })
}

// 创建角色
export function createRole(data: Api.SystemManage.RoleListItem) {
  return request.post<Api.SystemManage.RoleListItem>({
    url: '/role/add',
    data
  })
}

// 更新角色
export function updateRole(id: string, data: Api.SystemManage.RoleListItem) {
  return request.post<Api.SystemManage.RoleListItem>({
    url: `/role/update`,
    data
  })
}

// 删除角色
export function deleteRole(id: string) {
  return request.post<boolean>({
    url: `/role/delete/${id}`
  })
}

// 批量删除角色
export function batchDeleteRoles(ids: string[]) {
  return request.post<boolean>({
    url: '/role/delete/batch',
    data: ids
  })
}

interface MenuResponse {
  menuList: AppRouteRecord[]
}

// 获取菜单数据
// 当前使用本地模拟路由数据，实际项目中请求接口返回 asyncRoutes.ts 文件的数据
export async function fetchGetMenuList(): Promise<MenuResponse> {
  try {
    // 模拟接口返回的菜单数据
    // const menuData = asyncRoutes
    // 后台接口返回数据 - 直接声明为数组类型
    const menuData = await request.get<AppRouteRecord[]>({
      url: '/menu/list'
    })
    // 处理菜单数据
    const menuList = menuData.map((route) => menuDataToRouter(route))

    return { menuList }
  } catch (error) {
    throw error instanceof Error ? error : new Error('获取菜单失败')
  }
}

// 新增菜单
export function createMenu(data: any) {
  return request.post<any>({
    url: '/permissions/add',
    data
  })
}

// 更新菜单
export function updateMenu(id: string, data: any) {
  return request.post<any>({
    url: `/permissions/update`,
    data
  })
}

// 删除菜单
export function deleteMenu(id: string) {
  return request.post<boolean>({
    url: `/permissions/delete/${id}`
  })
}

// 新增权限按钮
export function createAuthButton(data: any) {
  return request.post<any>({
    url: '/permissions/auth/add',
    data
  })
}

// 更新权限按钮
export function updateAuthButton(id: string, data: any) {
  return request.post<any>({
    url: `/permissions/auth/update`,
    data
  })
}

// 删除权限按钮
export function deleteAuthButton(id: string) {
  return request.post<boolean>({
    url: `/permissions/auth/delete/${id}`
  })
}

// 获取所有权限
export async function fetchGetAllPermissions() {
  try {
    // 模拟接口返回的菜单数据
    // const menuData = asyncRoutes
    // 后台接口返回数据 - 直接声明为数组类型
    const menuList = await request.get<AppRouteRecord[]>({
      url: '/permissions/list'
    })

    return menuList
  } catch (error) {
    throw error instanceof Error ? error : new Error('获取菜单失败')
  }
}
